
package bd;
import java.util.*;
import java.sql.*;
import classes.*;
import javax.swing.JOptionPane;


public class UnidadeBD {

    public static boolean salvar(Unidade novoUnidade, Usuario usuarioLogado)
    {
        try{
            Connection conexao = Conexao.abrir();

            CallableStatement procedure = conexao.prepareCall("{call AT_UNIDADE(?,?,?,?,?,?)}");

            procedure.setInt(1,(Integer)null);
            procedure.setString(2,novoUnidade.getNome());
            procedure.setInt(3,novoUnidade.getLocal().getId());
            procedure.setInt(4,usuarioLogado.getId());
            procedure.setInt(5,(Integer)null);
            procedure.setString(6, "IN");
            procedure.execute();
            procedure.close();
            conexao.close();

            return true;
            
        }catch(Exception excecao){
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a inserção.");
            return false;
        }
    }

    public static boolean alterar(Unidade novoUnidade, Usuario usuarioLogado)
    {
        try{
            Connection conexao = Conexao.abrir();

            CallableStatement procedure = conexao.prepareCall("{call AT_UNIDADE(?,?,?,?,?,?)}");

            procedure.setInt(1,novoUnidade.getId());
            procedure.setString(2,novoUnidade.getNome());
            procedure.setInt(3,novoUnidade.getLocal().getId());
            procedure.setInt(4,(Integer)null);
            procedure.setInt(5,usuarioLogado.getId());
            procedure.setString(6, "AL");
            procedure.execute();
            procedure.close();
            conexao.close();

            return true;

        }catch(Exception excecao){
            JOptionPane.showMessageDialog(null, "Não foi possível realizar a inserção.");
            return false;
        }
    }

    public static boolean deletar(int codigo)
    {
        try{
            Connection conexao = Conexao.abrir();
            CallableStatement procedure = conexao.prepareCall("{call AT_UNIDADE(?,?,?,?,?,?)}");
            procedure.setInt(1, codigo);
            procedure.setString(2,null);
            procedure.setInt(3,(Integer)null);
            procedure.setInt(4,(Integer)null);
            procedure.setInt(5,(Integer)null);
            procedure.setString(6, "");
            procedure.execute();
            procedure.close();
            conexao.close();

            return true;
        }catch(Exception excecao){
            JOptionPane.showMessageDialog(null, "Não foi possível deletar.");
            return false;
        }
    }

    public static Unidade selecionar(int codigo)
    {
        Unidade retorno;
        try{
            Connection conexao = Conexao.abrir();
            Statement comandoSelect = conexao.createStatement();
            ResultSet resultado = comandoSelect.executeQuery("select * from VIEW_SELECIONARUNIDADE where uni_id="+codigo+"");
            if(resultado.next())
            {
                Unidade novaUnidade = new Unidade();
                novaUnidade.setId(resultado.getInt("uni_id"));
                novaUnidade.setLocal(LocalBD.selecionar(resultado.getInt("loc_id")));
                novaUnidade.setNome(resultado.getString("uni_nome"));
                retorno = novaUnidade;
            }else{
                retorno=null;
            }
            conexao.close();
            return retorno;

        }catch(Exception excecao){
            return null;
        }
    }

    public static ArrayList<Unidade> selecionar()
    {
        ArrayList<Unidade> vetUnidades = new ArrayList<Unidade>();
        try{
            Connection conexao = Conexao.abrir();
            Statement comandoSelect = conexao.createStatement();
            ResultSet resultado = comandoSelect.executeQuery("select * from VIEW_SELECIONARUNIDADE");
            while(resultado.next()){
                Unidade novaUnidade = new Unidade();
                novaUnidade.setId(resultado.getInt("uni_id"));
                novaUnidade.setLocal(LocalBD.selecionar(resultado.getInt("loc_id")));
                novaUnidade.setNome(resultado.getString("uni_nome"));
                comandoSelect.close();
                vetUnidades.add(novaUnidade);
            }
            conexao.close();
        }catch(Exception excecao){

        }
        return vetUnidades;
    }
}
